package cn.lysoy.demo.domain.param;

import lombok.Data;

import java.text.ParseException;
import java.text.SimpleDateFormat;

/**
 * 分页+日期查询用基本参数类
 * @author SongYang
 * @date 2022/06/27 17:43
 */
@Data
public class BaseParam {
    /**
     * 主键
     */
    protected String id;

    protected String startDate;   // start date 查询开始日期
    protected String endDate; // end date 查询结束日期

    protected Integer pageNum = 1; // page index 分页查询页码
    protected Integer pageSize = 10; // page size 分页查询页面大小

    public BaseParam() {
    }

    /**
     * 检查输入的开始日期和结束日期是否符合规范
     */
    public boolean validDate() {
        if (null != this.startDate && !isValidSqlDate(this.startDate)) {
            return false;
        }
        return null == this.endDate || isValidSqlDate(this.endDate);
    }



    /**
     * 检查输入的页码和页大小是否符合规范
     */
    public boolean validPage() {
        if (null == this.pageNum || null == this.pageSize ) {
            return false;
        }
        return this.pageNum >= 1 && this.pageSize >= 1;
    }


    /**
     * 检查输入参数是否符合规范
     */
    public boolean validParam() {
        return (validDate() && validPage());
    }

    /**
     * 检查是否符合sql时间规范
     * @author SongYang 2022年7月5日
     */
    private boolean isValidSqlDate(String str) {
        SimpleDateFormat format3 = new SimpleDateFormat("yyyy-MM-dd");
        try {
            format3.setLenient(false);
            format3.parse(str);
            return true;
        } catch (ParseException ignored) {

        }
        SimpleDateFormat format4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            format4.setLenient(false);
            format4.parse(str);
            return true;
        } catch (ParseException e) {
            return false;
        }
    }
}
